package Vista;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

import javax.swing.WindowConstants;
import javax.swing.SwingUtilities;

import Controlador.ControladorJuego;
import Controlador.ControladorMenu;



/**
* This code was edited or generated using CloudGarden's Jigloo
* SWT/Swing GUI Builder, which is free for non-commercial
* use. If Jigloo is being used commercially (ie, by a corporation,
* company or business for any purpose whatever) then you
* should purchase a license for each developer using Jigloo.
* Please visit www.cloudgarden.com for details.
* Use of Jigloo implies acceptance of these licensing terms.
* A COMMERCIAL LICENSE HAS NOT BEEN PURCHASED FOR
* THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED
* LEGALLY FOR ANY CORPORATE OR COMMERCIAL PURPOSE.
*/
public class VistaJuego extends javax.swing.JFrame {
	private JPanel jPanel1;
	private JButton botones[][];
	private int[][] matrizMinas;
	int fils;
	int cols;
	int totalminas;
	
    JTextField txtMinas;
    JTextField txtTiempo;
	
private ControladorMenu controladormenu;
private VistaMenu vistamenu;
private ControladorJuego control;
public JButton botonprueba;
public JTextField txtnivelado;
	/**
	* Auto-generated main method to display this JFrame
	*/

	public VistaJuego(int fils,int cols,int totalminas) {
		super();
		this.fils = fils;
		this.cols = cols;
		this.totalminas = totalminas;
		
		initGUI();
        		//cols,fils,totalminas
		Dimensiones();
		
	}

	private void initGUI() {
		try {
			setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
			{
			}
			pack();
			setSize(400, 300);
		} catch (Exception e) {
		    //add your error handling code here
			e.printStackTrace();
		}
	}
	public void addListener(ActionListener a) {
		
	
		for(int i=0;i<fils;++i)
		
			for(int j=0;j<cols;++j)
		{	
			botones[i][j].addActionListener(a);
		// TODO Auto-generated method stub
		}
	
	}
	
public JButton[][] getBotones() {
	return botones;
}

public void setBotones(JButton[][] botones) {
	this.botones = botones;
	
	
}//int cols,int fils,int totalminas
public void Dimensiones()
	{

    //	Cajas de texto
    txtMinas=new JTextField(3);
    txtTiempo=new JTextField(3);
    txtnivelado=new JTextField(7);
    
    JButton salir =new JButton();
    JButton botonprueba =new JButton();
    
    //	Etiquetas
    JLabel lMinas=new JLabel("Casillas restantes:");
    JLabel lTiempo=new JLabel("Tiempo transcurrido:");
    JLabel lnivel=new JLabel("Nivel:");
    
	//	Imagenes de minas
	ImageIcon imagenesMinas []=new ImageIcon [12];
	
	//	Dimensi�n
	
	
	//Asignacion al objecto	
		botones=new JButton [fils][cols];
		
		matrizMinas=new int [fils][cols];
		//	Cargar Im�genes
	//	for(int i=0;i<12;i++)
		//	imagenesMinas[i]=new ImageIcon(i+"feliz.jpg");
                
		//	Panel Superior

		//salir.setText("HolA");
		JPanel panelSup=new JPanel();
		panelSup.add(lMinas);
		panelSup.add(txtMinas);
	    panelSup.add(botonprueba);
	    botonprueba.setIcon(new ImageIcon(getClass().getClassLoader().getResource("Imagen/smiley.png")));
	  
	    botonprueba.setSize(6, 7);
	    botonprueba.setOpaque(false);
	    botonprueba.setPreferredSize(new java.awt.Dimension(30, 25));
	   // botonprueba.setIcon(new ImageIcon(getClass().getClassLoader().getResource("Vista/feliz.jpg")));

		panelSup.add(lTiempo);
	    panelSup.add(txtTiempo);
	    
	    //panelSup.add(panelSup,"North");
		txtMinas.setEditable(false);
		txtTiempo.setEditable(false);
		
		//	Panel de los botones
		JPanel panelMedio=new JPanel(new GridLayout(fils,cols));
		//	Crear y colocar botones
		for(int i=0;i<fils;i++)
		for(int j=0;j<cols;j++)
		{
			//	Crear boton
			botones [i][j]=new JButton();
			//	Colocar en el panel
			panelMedio.add(botones[i][j]);
			//	Action Listener
			//botones[i][j].addActionListener(this);
			//botones[i][j].setActionCommand("Basico");
		}this.setBotones(botones);
		//Adicion a la VistaJuego
		add(panelMedio,"Center");
		add(panelSup,"North");
		//Colocacion de minas aleatorias
		colocarMinas(totalminas);
       
        
		setTitle("Buscaminas");	
	    //panelMedio.setResizable(false);
	    panelMedio.setSize(600,600);
	    panelMedio.updateUI();
		panelMedio.setVisible(true);
	
		};
	
public String getTxtnivelado() {
	return txtnivelado.getText();
}

public void setTxtnivelado(String txtnivelado) {
	this.txtnivelado.setText(txtnivelado);
}

public JTextField getTxtTiempo() {
	return txtTiempo;
}

public void setTxtTiempo(JTextField txtTiempo) {
	this.txtTiempo = txtTiempo;
}

public String getTxtMinas() {
	return txtMinas.getText();
}

public void setTxtMinas(String ttxtMinas) {
	this.txtMinas.setText(ttxtMinas);
}

public void setmatriz(int[][] matrizm)
{
      	matrizMinas=matrizm;
}

public JButton[][] getbotones()
{
return botones;	
}
public int[][] getmatriz()
{
return matrizMinas;	
}
	//Procedimiento que coloca las minas de forma aleatoria
	public void colocarMinas(int minas) 
	    {
		    
			System.out.println("Colocando Minas... \n");
	
			for(int i=0;i<minas;i++)
			{
				
				//	Coordenadas
			   int x,y=0;
			   double x1,y1=0;
			
			   /*	Leyenda de matrizMinas
			   *	1 Existe Mina
			   *	0 No existe Mina
			   */
				//Colocar mina aleatoria
				do
				{
	            //	Generar posiciones aleatorias
	             x1=Math.random()*fils;
	             y1=Math.random()*cols;
			 	 x=(int)x1;
			     y=(int)y1;	
			 	}
				 while(matrizMinas[x][y]!=0);
				
				matrizMinas[x][y]=1; //	Poner mina
				
				//System.out.println(matrizMinas[x][y]);
			}setmatriz(matrizMinas);
			
			
	      //Visualizar Tablero de minas.
		  for(int l=0;l<fils;l++)
		  {
		  	System.out.println("");
		  	for(int j=0;j<cols;j++)
		  	{
		  		System.out.print(" "+matrizMinas[l][j]);
		  		
		     }
		  }
		  
   }	
	public int minasCerca(int x,int y)
	{
		/*	
		 *	x Coordenada filas
		 *	y Coordenada columnas
		 *
		 *	numeroMinas: devuelve el n�mero de minas de la posici�n
		 */
			 
         int numeroMinas=0;
        for(int i=y-1;i<=y+1;i++){
          	//En horizontal
            if(i>-1 && i<cols){
	        if(matrizMinas[x][i]==1){
	       		numeroMinas++;
	         }
             }
         }
            //	En vertical
        for(int j=x-1;j<=x+1;j++){
       		if(j>-1 && j<fils)
   			if(matrizMinas[j][y]==1){
       			numeroMinas++;
             }
	     }
	        //	En diagonal
	        //	Posici�n de la esquina superior izquierda
	        int x1=x;
	        int y1=y;
	        x1--;
	        y1--;
	   	for(int i=x1;i<x1+3;i++)
	  		{
			if(i>-1 && i<fils && y1>-1 && y1<cols)
	    	 if(matrizMinas[i][y1]==1){
	       		numeroMinas++;
	          	}
	            	y1++;
	        	}
	        //	Posici�n de la esquina superior derecha
	        x1=x;
	        y1=y;
	        x1--;
	        y1++;
	    for(int i=x1;i<x1+3;i++)
	    	{
	    	if(i>-1 && i<fils && y1>-1 && y1<cols)
	        if(matrizMinas[i][y1]==1){
	       		numeroMinas++;
	       	}
	             	y1--;
	       }
            return numeroMinas;
	}


}
